#include <bits/stdc++.h>

using namespace std;

// int main()
// {
//     int n, m, s, t, v;
//     cin >> n >> m;
//     vector<vector<int>> graph;
//     for (int i = 0; i < m; i++)
//     {
//         cin >> s >> t >> v;
//         graph.push_back({s, t, v});
//     }
//     vector<int> min_dist(n + 1, INT_MAX);
//     int start = 1;
//     int end = n;
//     min_dist[start] = 0;
//     bool flag = false;
//     for (int i = 1; i <= n; i++)
//     {
//         for (auto &vec : graph)
//         {
//             int from = vec[0];
//             int to = vec[1];
//             int val = vec[2];
//             if (i < n)
//             {
//                 if (min_dist[from] != INT_MAX && min_dist[to] > min_dist[from] + val)
//                 {
//                     min_dist[to] = min_dist[from] + val;
//                 }
//             }
//             else
//             {
//                 if (min_dist[from] != INT_MAX && min_dist[to] > min_dist[from] + val)
//                 {
//                     flag = true;
//                 }
//             }
//         }
//     }
//     if (flag)
//     {
//         cout << "circle" << endl;
//         return 0;
//     }
//     if (min_dist[end] == INT_MAX)
//     {
//         cout << "unconnected" << endl;
//     }
//     else
//     {
//         cout << min_dist[end] << endl;
//     }
//     return 0;
// }

// optimized version
struct Edge
{
    int to;
    int value;
    Edge(int t, int v) : to(t), value(v) {}
};
int main()
{
    int n, m, s, t, v;
    cin >> n >> m;
    vector<list<Edge>> graph(n + 1);
    for (int i = 0; i < m; i++)
    {
        cin >> s >> t >> v;
        graph[s].push_back({t, v});
    }
    queue<int> que;
    int start = 1;
    int end = n;
    vector<int> min_dist(n + 1, INT_MAX);
    min_dist[start] = 0;
    que.push(start);
    vector<int> count(n + 1, 0);
    count[start]++;
    bool flag = false;
    while (!que.empty())
    {
        int index = que.front();
        que.pop();
        for (auto &edge : graph[index])
        {
            int from = index;
            int to = edge.to;
            int value = edge.value;
            if (min_dist[from] + value < min_dist[to])
            {
                min_dist[to] = min_dist[from] + value;
                que.push(to);
                count[to]++;
                if (count[to] == n)
                {
                    flag = true;
                    while (!que.empty())
                    {
                        que.pop();
                    }
                    break;
                }
            }
        }
    }
    if (flag)
    {
        cout << "circle" << endl;
        return 0;
    }
    if (min_dist[end] == INT_MAX)
    {
        cout << "unconnected" << endl;
    }
    else
    {
        cout << min_dist[end] << endl;
    }
    return 0;
}
